﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Office.Interop.Excel;

namespace Formation_Entreprise
{
    /// <summary>
    /// La classe CreateExcelDocument est utiliser afin de créé les rapport excel.
    /// </summary>
    class CreateExcelDocument
    {       
        // Variable de la classe
        private Application app = null;
        private Workbook workbook = null;
        private Worksheet worksheet = null;
        private Range workSheet_range = null;

        // Constructeur de l'objet CreateExcelDocument
        public CreateExcelDocument()
        {
            CreateDocument(); 
        }


        /// <summary>
        /// Initialise les variables de l'objet CreateExcelDocument
        /// </summary>
        public void CreateDocument()
        {
            try
            {       
                app = new Application();
                app.Visible = true;
                workbook = app.Workbooks.Add(1);
                worksheet = (Worksheet)workbook.Sheets[1];
            }
            catch (Exception e)
            {
                // Fort probablement que le client n'a pas MS Excel d'installer
                // sur son poste de travail
                Console.Write("Erreur");
            }
        }


        /// <summary>
        /// Methode CreatCell fait le pont entre la feuille Excel et l'application,
        /// il suffit simplement d'entrer les paramètres désirer.
        /// </summary>
        /// <param name="row">Positionnement du texte sur l'axe des "x".</param>
        /// <param name="col">Positionnement du texte sur l'axe des "y".</param>
        /// <param name="text">Le texte à insérer.</param>
        /// <param name="cell1">Délémitation des cellules à utiliser.</param>
        /// <param name="cell2">Délémitation des cellules à utiliser.</param>
        /// <param name="mergeColumns">Nombre de cellules à fusionner.</param>
        /// <param name="b">La couleur du background.</param>
        /// <param name="font">Vrai ou Faux: Vrai pour caractère gras.</param>
        /// <param name="size">Longeur de la cellule.</param>
        /// <param name="fcolor">La couleur de la police, laisser vide pour noir.</param>
        public void createCell(int row, int col, string text, string cell1,
        string cell2, int mergeColumns, string b, bool font, int size, string fcolor)
        {
            // Selection de la cellule et inscription du texte reçu.
            worksheet.Cells[row, col] = text;
            workSheet_range = worksheet.get_Range(cell1, cell2);
            workSheet_range.Merge(mergeColumns);

            // Selection de la couleur d'arriere plan de la cellule
            switch(b)
            {
                case "AliceBlue":
                    workSheet_range.Interior.Color = 
                    System.Drawing.Color.AliceBlue.ToArgb();
                    break;
                case "GRAY":
                    workSheet_range.Interior.Color = 
                    System.Drawing.Color.Gray.ToArgb();
                    break;
                default: // couleur par défaut est le Blanc
                    workSheet_range.Interior.Color = 
                    System.Drawing.Color.White.ToArgb();
                    break;
            }
         
            // Ajustement des bordures et dimension de la cellule nouvellement 
            // formaté et de la décoration du texte
            workSheet_range.Borders.Color = System.Drawing.Color.Black.ToArgb();
            workSheet_range.Font.Bold = font;
            workSheet_range.ColumnWidth = size;
            if (fcolor.Equals(""))
            {
                workSheet_range.Font.Color = System.Drawing.Color.White.ToArgb();
            }
            else {
                workSheet_range.Font.Color = System.Drawing.Color.Black.ToArgb();
            }
        }
    }
}
